home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / FWPrtIte.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  16.3 KB  |  538 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWPrtIte.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWPRTITE_H
  13. #include "FWPrtIte.h"
  14. #endif
  15.  
  16. #ifndef FWFRAME_H
  17. #include "FWFrame.h"
  18. #endif
  19.  
  20. #ifndef FWFRMING_H
  21. #include "FWFrming.h"
  22. #endif
  23.  
  24. #ifndef FWITERS_H
  25. #include "FWIters.h"
  26. #endif
  27.  
  28. #ifndef FWPXYFRM_H
  29. #include "FWPxyFrm.h"
  30. #endif
  31.  
  32. #ifndef FWPXYITE_H
  33. #include "FWPxyIte.h"
  34. #endif
  35.  
  36. // ----- ODUtil -----
  37.  
  38. #ifndef FWORDCOL_H
  39. #include "FWOrdCol.h"
  40. #endif
  41.  
  42. // ----- OpenDoc Includes -----
  43.  
  44. #ifndef SOM_ODFacetIterator_xh
  45. #include <FacetItr.xh>
  46. #endif
  47.  
  48. #ifndef SOM_ODFrameFacetIterator_xh
  49. #include <FrFaItr.xh>
  50. #endif
  51.  
  52. //========================================================================================
  53. //    Runtime informations
  54. //========================================================================================
  55.  
  56. #ifdef FW_BUILD_MAC
  57. #pragma segment framework
  58. #endif
  59.  
  60. FW_DEFINE_AUTO(FW_CPartFrameIterator)
  61. FW_DEFINE_AUTO(FW_CPartProxyFrameIterator)
  62. FW_DEFINE_AUTO(FW_CPartEmbeddedFrameIterator)
  63. FW_DEFINE_AUTO(FW_CPartPresentationIterator)
  64. FW_DEFINE_AUTO(FW_CPartKindIterator)
  65. FW_DEFINE_AUTO(FW_CPartProxyIterator)
  66.  
  67. //========================================================================================
  68. //    class FW_CPartFrameIterator
  69. //========================================================================================
  70.  
  71. //---------------------------------------------------------------------------------------
  72. //    FW_CPartFrameIterator::FW_CPartFrameIterator
  73. //---------------------------------------------------------------------------------------
  74.  
  75. FW_CPartFrameIterator::FW_CPartFrameIterator(Environment* ev, const FW_CPart* part) :
  76.     fPresentationIterator(part),
  77.     fFrameIterator(NULL),
  78.     fCurrentFrame(NULL)
  79. {
  80. FW_UNUSED(ev);
  81.     FW_END_CONSTRUCTOR
  82. }
  83.  
  84. //---------------------------------------------------------------------------------------
  85. //    FW_CPartFrameIterator::~FW_CPartFrameIterator
  86. //---------------------------------------------------------------------------------------
  87.  
  88. FW_CPartFrameIterator::~FW_CPartFrameIterator()
  89. {
  90.     FW_START_DESTRUCTOR
  91.     
  92.     delete fFrameIterator;
  93. }
  94.  
  95. //---------------------------------------------------------------------------------------
  96. //    FW_CPartFrameIterator::First
  97. //---------------------------------------------------------------------------------------
  98.  
  99. FW_CFrame* FW_CPartFrameIterator::First(Environment* ev)
  100. {
  101.     return PrivFirstFrame(ev, fPresentationIterator.First());
  102. }
  103.  
  104. //---------------------------------------------------------------------------------------
  105. //    FW_CPartFrameIterator::Last
  106. //---------------------------------------------------------------------------------------
  107.  
  108. FW_CFrame* FW_CPartFrameIterator::Last(Environment* ev)
  109. {
  110.     return PrivLastFrame(ev, fPresentationIterator.Last());
  111. }
  112.  
  113. //---------------------------------------------------------------------------------------
  114. //    FW_CPartFrameIterator::Next
  115. //---------------------------------------------------------------------------------------
  116.  
  117. FW_CFrame* FW_CPartFrameIterator::Next(Environment* ev)
  118. {
  119.     FW_ASSERT(fFrameIterator);
  120.     
  121.     fCurrentFrame = fFrameIterator->Next(ev);
  122.     if (fCurrentFrame == NULL)
  123.     {
  124.         FW_CPresentation* presentation = fPresentationIterator.Next();
  125.         PrivFirstFrame(ev, presentation);
  126.     }
  127.         
  128.     return fCurrentFrame;
  129. }
  130.  
  131. //---------------------------------------------------------------------------------------
  132. //    FW_CPartFrameIterator::Previous
  133. //---------------------------------------------------------------------------------------
  134.  
  135. FW_CFrame* FW_CPartFrameIterator::Previous(Environment* ev)
  136. {
  137.     FW_ASSERT(fFrameIterator);
  138.     
  139.     fCurrentFrame = fFrameIterator->Previous(ev);
  140.     if (fCurrentFrame == NULL)
  141.     {
  142.         FW_CPresentation* presentation = fPresentationIterator.Previous();
  143.         PrivLastFrame(ev, presentation);
  144.     }
  145.         
  146.     return fCurrentFrame;
  147. }
  148.  
  149. //---------------------------------------------------------------------------------------
  150. //    FW_CPartFrameIterator::PrivFirstFrame
  151. //---------------------------------------------------------------------------------------
  152.  
  153. FW_CFrame* FW_CPartFrameIterator::PrivFirstFrame(Environment* ev, FW_CPresentation* presentation)
  154. {
  155.     fCurrentFrame = NULL;
  156.     
  157.     delete fFrameIterator;
  158.     fFrameIterator = NULL;
  159.     
  160.     while (presentation != NULL)
  161.     {
  162.         fFrameIterator = FW_NEW(FW_CPresentationFrameIterator, (ev, presentation));
  163.         fCurrentFrame = fFrameIterator->First(ev);
  164.         if (fCurrentFrame != NULL)
  165.             return fCurrentFrame;
  166.         
  167.         delete fFrameIterator;
  168.         fFrameIterator = NULL;
  169.         presentation = fPresentationIterator.Next();            
  170.     }
  171.     
  172.     return fCurrentFrame;
  173. }
  174.  
  175. //---------------------------------------------------------------------------------------
  176. //    FW_CPartFrameIterator::PrivLastFrame
  177. //---------------------------------------------------------------------------------------
  178.  
  179. FW_CFrame* FW_CPartFrameIterator::PrivLastFrame(Environment* ev, FW_CPresentation* presentation)
  180. {
  181.     fCurrentFrame = NULL;
  182.     
  183.     delete fFrameIterator;
  184.     fFrameIterator = NULL;
  185.     
  186.     while (presentation != NULL)
  187.     {
  188.         fFrameIterator = FW_NEW(FW_CPresentationFrameIterator, (ev, presentation));
  189.         fCurrentFrame = fFrameIterator->Last(ev);
  190.         if (fCurrentFrame != NULL)
  191.             return fCurrentFrame;
  192.         
  193.         delete fFrameIterator;
  194.         fFrameIterator = NULL;
  195.         presentation = fPresentationIterator.Previous();            
  196.     }
  197.     
  198.     return fCurrentFrame;
  199. }
  200.  
  201. //========================================================================================
  202. //    class FW_CPartProxyFrameIterator
  203. //========================================================================================
  204.  
  205. //---------------------------------------------------------------------------------------
  206. //    FW_CPartProxyFrameIterator::FW_CPartProxyFrameIterator
  207. //---------------------------------------------------------------------------------------
  208.  
  209. FW_CPartProxyFrameIterator::FW_CPartProxyFrameIterator(const FW_CEmbeddingPart* part) :
  210.     fProxyIterator(part),
  211.     fProxyFrameIterator(NULL),
  212.     fCurrentFrame(NULL)
  213. {
  214.     FW_END_CONSTRUCTOR
  215. }
  216.  
  217. //---------------------------------------------------------------------------------------
  218. //    FW_CPartProxyFrameIterator::~FW_CPartProxyFrameIterator
  219. //---------------------------------------------------------------------------------------
  220.  
  221. FW_CPartProxyFrameIterator::~FW_CPartProxyFrameIterator()
  222. {
  223.     FW_START_DESTRUCTOR
  224.     
  225.     delete fProxyFrameIterator;
  226. }
  227.  
  228. //---------------------------------------------------------------------------------------
  229. //    FW_CPartProxyFrameIterator::First
  230. //---------------------------------------------------------------------------------------
  231.  
  232. FW_CProxyFrame* FW_CPartProxyFrameIterator::First()
  233. {
  234.     return PrivFirstFrame(fProxyIterator.First());
  235. }
  236.  
  237. //---------------------------------------------------------------------------------------
  238. //    FW_CPartProxyFrameIterator::Last
  239. //---------------------------------------------------------------------------------------
  240.  
  241. FW_CProxyFrame* FW_CPartProxyFrameIterator::Last()
  242. {
  243.     return PrivLastFrame(fProxyIterator.Last());
  244. }
  245.  
  246. //---------------------------------------------------------------------------------------
  247. //    FW_CPartProxyFrameIterator::Next
  248. //---------------------------------------------------------------------------------------
  249.  
  250. FW_CProxyFrame* FW_CPartProxyFrameIterator::Next()
  251. {
  252.     FW_ASSERT(fProxyFrameIterator);
  253.     
  254.     fCurrentFrame = fProxyFrameIterator->Next();
  255.     if (fCurrentFrame == NULL)
  256.     {
  257.         FW_MProxy* proxy = fProxyIterator.Next();
  258.         PrivFirstFrame(proxy);
  259.     }
  260.         
  261.     return fCurrentFrame;
  262. }
  263.  
  264. //---------------------------------------------------------------------------------------
  265. //    FW_CPartProxyFrameIterator::Previous
  266. //---------------------------------------------------------------------------------------
  267.  
  268. FW_CProxyFrame* FW_CPartProxyFrameIterator::Previous()
  269. {
  270.     FW_ASSERT(fProxyFrameIterator);
  271.     
  272.     fCurrentFrame = fProxyFrameIterator->Previous();
  273.     if (fCurrentFrame == NULL)
  274.     {
  275.         FW_MProxy* proxy = fProxyIterator.Previous();
  276.         PrivLastFrame(proxy);
  277.     }
  278.         
  279.     return fCurrentFrame;
  280. }
  281.  
  282. //---------------------------------------------------------------------------------------
  283. //    FW_CPartProxyFrameIterator::PrivFirstFrame
  284. //---------------------------------------------------------------------------------------
  285.  
  286. FW_CProxyFrame* FW_CPartProxyFrameIterator::PrivFirstFrame(FW_MProxy* proxy)
  287. {
  288.     fCurrentFrame = NULL;
  289.     
  290.     delete fProxyFrameIterator;
  291.     fProxyFrameIterator = NULL;
  292.     
  293.     while (proxy != NULL)
  294.     {
  295.         fProxyFrameIterator = FW_NEW(FW_CProxyProxyFrameIterator, (proxy));
  296.         fCurrentFrame = fProxyFrameIterator->First();
  297.         if (fCurrentFrame != NULL)
  298.             return fCurrentFrame;
  299.         
  300.         delete fProxyFrameIterator;
  301.         fProxyFrameIterator = NULL;
  302.         proxy = fProxyIterator.Next();            
  303.     }
  304.     
  305.     return fCurrentFrame;
  306. }
  307.  
  308. //---------------------------------------------------------------------------------------
  309. //    FW_CPartProxyFrameIterator::PrivLastFrame
  310. //---------------------------------------------------------------------------------------
  311.  
  312. FW_CProxyFrame* FW_CPartProxyFrameIterator::PrivLastFrame(FW_MProxy* proxy)
  313. {
  314.     fCurrentFrame = NULL;
  315.     
  316.     delete fProxyFrameIterator;
  317.     fProxyFrameIterator = NULL;
  318.     
  319.     while (proxy != NULL)
  320.     {
  321.         fProxyFrameIterator = FW_NEW(FW_CProxyProxyFrameIterator, (proxy));
  322.         fCurrentFrame = fProxyFrameIterator->Last();
  323.         if (fCurrentFrame != NULL)
  324.             return fCurrentFrame;
  325.         
  326.         delete fProxyFrameIterator;
  327.         fProxyFrameIterator = NULL;
  328.         proxy = fProxyIterator.Previous();            
  329.     }
  330.     
  331.     return fCurrentFrame;
  332. }
  333.  
  334. //========================================================================================
  335. //    class FW_CPartEmbeddedFrameIterator
  336. //========================================================================================
  337.  
  338. //---------------------------------------------------------------------------------------
  339. //    FW_CPartEmbeddedFrameIterator::FW_CPartEmbeddedFrameIterator
  340. //---------------------------------------------------------------------------------------
  341.  
  342. FW_CPartEmbeddedFrameIterator::FW_CPartEmbeddedFrameIterator(Environment* ev, const FW_CEmbeddingPart* part, FW_CEmbeddingFrame* frame) :
  343.     fProxyIterator(part),
  344.     fEmbeddedFrameIterator(NULL),
  345.     fCurrentFrame(NULL),
  346.     fEmbeddingFrame(frame)
  347. {
  348. FW_UNUSED(ev);
  349.     FW_END_CONSTRUCTOR
  350. }
  351.  
  352. //---------------------------------------------------------------------------------------
  353. //    FW_CPartEmbeddedFrameIterator::~FW_CPartEmbeddedFrameIterator
  354. //---------------------------------------------------------------------------------------
  355.  
  356. FW_CPartEmbeddedFrameIterator::~FW_CPartEmbeddedFrameIterator()
  357. {
  358.     FW_START_DESTRUCTOR
  359.     
  360.     delete fEmbeddedFrameIterator;
  361. }
  362.  
  363. //---------------------------------------------------------------------------------------
  364. //    FW_CPartEmbeddedFrameIterator::First
  365. //---------------------------------------------------------------------------------------
  366.  
  367. ODFrame* FW_CPartEmbeddedFrameIterator::First(Environment* ev)
  368. {
  369.     return PrivFirstFrame(ev, fProxyIterator.First());
  370. }
  371.  
  372. //---------------------------------------------------------------------------------------
  373. //    FW_CPartEmbeddedFrameIterator::Last
  374. //---------------------------------------------------------------------------------------
  375.  
  376. ODFrame* FW_CPartEmbeddedFrameIterator::Last(Environment* ev)
  377. {
  378.     return PrivLastFrame(ev, fProxyIterator.Last());
  379. }
  380.  
  381. //---------------------------------------------------------------------------------------
  382. //    FW_CPartEmbeddedFrameIterator::Next
  383. //---------------------------------------------------------------------------------------
  384.  
  385. ODFrame* FW_CPartEmbeddedFrameIterator::Next(Environment* ev)
  386. {
  387.     FW_ASSERT(fEmbeddedFrameIterator);
  388.     
  389.     fCurrentFrame = fEmbeddedFrameIterator->Next(ev);
  390.     if (fCurrentFrame == NULL)
  391.     {
  392.         FW_MProxy* proxy = fProxyIterator.Next();
  393.         PrivFirstFrame(ev, proxy);
  394.     }
  395.         
  396.     return fCurrentFrame;
  397. }
  398.  
  399. //---------------------------------------------------------------------------------------
  400. //    FW_CPartEmbeddedFrameIterator::Previous
  401. //---------------------------------------------------------------------------------------
  402.  
  403. ODFrame* FW_CPartEmbeddedFrameIterator::Previous(Environment* ev)
  404. {
  405.     FW_ASSERT(fEmbeddedFrameIterator);
  406.     
  407.     fCurrentFrame = fEmbeddedFrameIterator->Previous(ev);
  408.     if (fCurrentFrame == NULL)
  409.     {
  410.         FW_MProxy* proxy = fProxyIterator.Previous();
  411.         PrivLastFrame(ev, proxy);
  412.     }
  413.         
  414.     return fCurrentFrame;
  415. }
  416.  
  417. //---------------------------------------------------------------------------------------
  418. //    FW_CPartEmbeddedFrameIterator::PrivFirstFrame
  419. //---------------------------------------------------------------------------------------
  420.  
  421. ODFrame* FW_CPartEmbeddedFrameIterator::PrivFirstFrame(Environment* ev, FW_MProxy* proxy)
  422. {
  423.     fCurrentFrame = NULL;
  424.     
  425.     delete fEmbeddedFrameIterator;
  426.     fEmbeddedFrameIterator = NULL;
  427.     
  428.     while (proxy != NULL)
  429.     {
  430.         fEmbeddedFrameIterator = FW_NEW(FW_CProxyEmbeddedFrameIterator, (ev, proxy));
  431.         fCurrentFrame = fEmbeddedFrameIterator->First(ev);
  432.         if (fCurrentFrame != NULL)
  433.             return fCurrentFrame;
  434.         
  435.         delete fEmbeddedFrameIterator;
  436.         fEmbeddedFrameIterator = NULL;
  437.         proxy = fProxyIterator.Next();            
  438.     }
  439.     
  440.     return fCurrentFrame;
  441. }
  442.  
  443. //---------------------------------------------------------------------------------------
  444. //    FW_CPartEmbeddedFrameIterator::PrivLastFrame
  445. //---------------------------------------------------------------------------------------
  446.  
  447. ODFrame* FW_CPartEmbeddedFrameIterator::PrivLastFrame(Environment* ev, FW_MProxy* proxy)
  448. {
  449.     fCurrentFrame = NULL;
  450.     
  451.     delete fEmbeddedFrameIterator;
  452.     fEmbeddedFrameIterator = NULL;
  453.     
  454.     while (proxy != NULL)
  455.     {
  456.         fEmbeddedFrameIterator = FW_NEW(FW_CProxyEmbeddedFrameIterator, (ev, proxy));
  457.         fCurrentFrame = fEmbeddedFrameIterator->Last(ev);
  458.         if (fCurrentFrame != NULL)
  459.             return fCurrentFrame;
  460.         
  461.         delete fEmbeddedFrameIterator;
  462.         fEmbeddedFrameIterator = NULL;
  463.         proxy = fProxyIterator.Previous();
  464.     }
  465.     
  466.     return fCurrentFrame;
  467. }
  468.  
  469. //========================================================================================
  470. //    class FW_CPartKindIterator
  471. //========================================================================================
  472.  
  473. //---------------------------------------------------------------------------------------
  474. //    FW_CPartKindIterator::FW_CPartKindIterator
  475. //---------------------------------------------------------------------------------------
  476.  
  477. FW_CPartKindIterator::FW_CPartKindIterator(const FW_CPart* part) :
  478.     FW_TOrderedCollectionIterator<FW_CKind>(part->fKinds)
  479. {
  480.     FW_END_CONSTRUCTOR
  481. }
  482.  
  483. //---------------------------------------------------------------------------------------
  484. //    FW_CPartKindIterator::~FW_CPartKindIterator
  485. //---------------------------------------------------------------------------------------
  486.  
  487. FW_CPartKindIterator::~FW_CPartKindIterator()
  488. {
  489.     FW_START_DESTRUCTOR
  490. }
  491.  
  492. //========================================================================================
  493. //    class FW_CPartPresentationIterator
  494. //========================================================================================
  495.  
  496. //---------------------------------------------------------------------------------------
  497. //    FW_CPartPresentationIterator::FW_CPartPresentationIterator
  498. //---------------------------------------------------------------------------------------
  499.  
  500. FW_CPartPresentationIterator::FW_CPartPresentationIterator(const FW_CPart* part) :
  501.     FW_TOrderedCollectionIterator<FW_CPresentation>(part->fPresentations)
  502. {
  503.     FW_END_CONSTRUCTOR
  504. }
  505.  
  506. //---------------------------------------------------------------------------------------
  507. //    FW_CPartPresentationIterator::~FW_CPartPresentationIterator
  508. //---------------------------------------------------------------------------------------
  509.  
  510. FW_CPartPresentationIterator::~FW_CPartPresentationIterator()
  511. {
  512.     FW_START_DESTRUCTOR
  513. }
  514.  
  515. //========================================================================================
  516. //    class FW_CPartProxyIterator
  517. //========================================================================================
  518.  
  519. //---------------------------------------------------------------------------------------
  520. //    FW_CPartProxyIterator::FW_CPartProxyIterator
  521. //---------------------------------------------------------------------------------------
  522.  
  523. FW_CPartProxyIterator::FW_CPartProxyIterator(const FW_CEmbeddingPart* part) :
  524.     FW_TOrderedCollectionIterator<FW_MProxy>(part->fProxys)
  525. {
  526.     FW_END_CONSTRUCTOR
  527. }
  528.  
  529. //---------------------------------------------------------------------------------------
  530. //    FW_CPartProxyIterator::~FW_CPartProxyIterator
  531. //---------------------------------------------------------------------------------------
  532.  
  533. FW_CPartProxyIterator::~FW_CPartProxyIterator()
  534. {
  535.     FW_START_DESTRUCTOR
  536. }
  537.  
  538.